技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
第 12 屆 iThome 鐵人賽
DAY
30
0
Software Development
安全軟體開發生命週期(SSDLC)學習筆記
系列 第
30
篇
API 開發方法
12th鐵人賽
HO-HSUN
2020-10-15 19:00:35
1872 瀏覽
分享至
總覽
API 路徑(Endpoint)的一般安全準則。
注意事項
存取控制
API路徑應遵循最小特權原則。具有受保護訊息的服務應服務於最小的群體。
具有錯誤配置的存取控制的API可能導致意外的訊息洩漏,或對敏感資料進行未經授權的惡意更改狀態的操作。
問題範例:
POST,允許用戶修改帳戶訊息,而無需檢查用戶是否擁有要修改的帳戶。
一個GET請求,該請求無需身份驗證即可返回敏感的訊息性訊息。
修正方式
確定哪些API操作應被視為敏感或公開的。
對於內部API:盡可能限制網路存取。
理想情況下,這些路徑應被限制在一個封閉的網路中。
並且要求比單一API金鑰更強的身份驗證。
例如,多因子身份驗證。
對於具有敏感訊息的公開API:
在執行請求的任何操作之前,需要進行身份驗證。
API金鑰應該是可撤銷的,也可以是可更新的。
對於提供公開訊息的公開API:
確保未通過身份驗證未通過公開API執行任何狀態更改操作。
考慮速率限制,以防止單個主機在短時間內發出太多請求。
風險等級
根據情況從低到高不等。
參考資料
https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
輸入驗證
傳入的資料在解析時可能格式錯誤或被設計為導致意外行為。
根據輸入的解析方式,未驗證的輸入可能包含命令注入或其他有害操作。
修正方式
類型檢查:
確保輸入為預期的資料類型,拒絕其他任何內容。
確保輸入為預期的資料類型,拒絕其他任何內容。
長度和大小檢查:
輸入應在預期的長度或大小之內。
拒絕任何大於或小於預期的內容。
將白名單接受的內容類型
限制http方法
風險等級
根據情況從低到高不等。
驗證要求
有可能在原始請求者和API路徑之間的傳輸過程中修改請求。
修改後的請求可能導致對原始請求者的資料進行狀態更改操作。
或者導致要提供的資料不正確,修改或意外。
重播攻擊
攻擊者發送了先前的真實請求,以使操作在以後的時間再次發生。
傳輸中已修改的請求:攻擊者會在發送真實請求時修改資料。
修正方式
為每個包含敏感資料或操作的請求生成簽名或HMAC(雜湊訊息驗證碼)。
檢查請求的簽名以確定其是否真實。
簽署包含時間戳記的請求,並拒絕所有相對過舊的請求。
風險等級
根據情況從低到高不等。
參考資料
https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html#why-requests-are-signed
通用安全實踐
即使遵循API的最佳安全做法,也有可能錯過其他惡意活動。
問題範例:
沒有日誌記錄或監視丟失的安全事件
返回服務後端的堆疊紀錄或其他描述性訊息
修正方式
記錄並監視API活動。
檢測異常可以幫助發現其他地方沒有發現的惡意活動。
禁用CORS(跨源資源共享)
或者將CORS的範圍縮小到最小,以防止偽造的請求或資料洩漏。
返回模糊的錯誤回應。
向用戶返回錯誤時,請盡可能少地提供訊息。
不要返回有關服務器環境的任何訊息或調試訊息,例如堆疊紀錄。
風險等級
根據情況從低到高不等。
留言
追蹤
檢舉
上一篇
Ruby 最佳實踐
下一篇
授權和認證開發方法
系列文
安全軟體開發生命週期(SSDLC)學習筆記
共
36
篇
目錄
RSS系列文
訂閱系列文
21
人訂閱
32
密碼開發方法
33
HTTP標頭開發方法
34
防止常見的Web攻擊開發方法
35
安全密碼儲存開發方法
36
安全系統開發方法
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19856
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
防火牆fortinet只開放line 問題
Gem如何找到該功能?!我是Gemini付費使用者
中華電信光纜當骨幹...SWminigbic無法正常使用
我在做 packet tracer 的題目,想請問一下該怎麼做
dhcp 在client 端機碼設定的問題
照片破圖或是有損壞,如何修復?
熱門回答
防火牆fortinet只開放line 問題
中華電信光纜當骨幹...SWminigbic無法正常使用
我在做 packet tracer 的題目,想請問一下該怎麼做
dhcp 在client 端機碼設定的問題
熱門文章
Agentic AI 開發實戰:我是如何設計 “Code + LLM” 混合架構,解決 AI品質不穩的問題?
ISC2 CC 證照考試筆記和影片
VScode 開發應用系統專案(10) - Spring boot MVC 應用系統設計(1)
【資料治理實戰回憶錄】04. 拆解元數據 (下):讓資料「用起來」
[gem5] 該怎麼編譯以及運行 gem5 ?
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}